#pragma once

#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cassert>
#include <sys/stat.h>
#include <fcntl.h>

#define EMPTYNULL "/dev/null"

void protextProgram()
{
    //第一步，忽略异常信号
    signal(SIGPIPE,SIG_IGN);

    //第二步，进程组组长是不可以变为守护进程独立成为一个进程组的
    int tid = fork();
    if(tid > 0)  exit(0);

    pid_t n = setsid();
    assert(n != -1);
    //重定向标准打开的文件

    int fd = open(EMPTYNULL,O_RDWR);
     
    if(fd == -1)
    {
        close(0);
        close(1);
        close(2);
    }
    else
    {
        dup2(fd,0);
        dup2(fd,1);
        dup2(fd,2);

        //重定向后关闭黑洞文件
        close(fd);
    }

    //在这里你可以试着更改工作目录
    //

    //if(EMPTYNULL) chdir("某某某路径");

}